package edu.vt.ece3574.ninjatag;

/****************************************************************************
 * Copyright 2012 Landon Biggs, Chris Dusold, Brad Russell, and Craig Wertz	*
 * Licensed under the Apache License, Version 2.0 (the "License");			*
 * you may not use this file except in compliance with the License.			*
 * You may obtain a copy of the License at									*
 * 																			*
 * http://www.apache.org/licenses/LICENSE-2.0								*
 * 																			*
 * Unless required by applicable law or agreed to in writing, software		*
 * distributed under the License is distributed on an "AS IS" BASIS,		*
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.	*
 * See the License for the specific language governing permissions and		*
 * limitations under the License.											*
 ****************************************************************************/

import java.util.List;

/**
 * This is an interface for a game in the Ninja-Tag app.<br>
 * It describes the smallest subset of methods required for a game.
 * @author Chris Dusold
 *
 */
public interface GameIf {
	
	
	
	/**
	 * This method should be overwritten to return a list of players in the game that is described.
	 * They will be returned as some implementation of {@link PlayerIf} which has all the proper
	 * accesses for necessary values for the player for the game (e.g. Facebook User ID).
	 * @return a list of player objects.
	 */
	public List<PlayerIf> getPlayers();
	
	
	
	/**
	 * This method returns the time at which the game is over. This might not be a static time,
	 * depending on the definition of the game.
	 * @return the time at which the game is planned to end.
	 */
	public long endTime();
	
	
	
	/**
	 * This method should be overwritten to return the name of the game instance, not the name of
	 * the game style. This is for first glance differentiation of games in a list.
	 * @return a name for the game instance.
	 */
	public String getName();
	
	
	
	/**
	 * This method should be the same for all the games of the same type. Go crazy with the implementation,
	 * if you want that amount of customization in your game.
	 * @return game type name.
	 */
	public String getType();
	
	
	

} //TODO: Add necessary methods that should be implemented for any game.
